const {
	src,
	dest,
	series,
	watch,
	parallel
} = require("gulp");



const gulpif = require('gulp-if');

const rename = require("gulp-rename");
const uglify = require("gulp-uglify");
const sass = require("gulp-sass")(require("sass"));
const concat = require('gulp-concat');
const cssmin = require("gulp-cssmin");
const imagemin = require('gulp-imagemin');
const htmlmin = require("gulp-htmlmin");
const sourcemaps = require("gulp-sourcemaps");
const rev = require("gulp-rev");
const revCollector = require('gulp-rev-collector')


const del = require("del");
const webserver = require("gulp-webserver");


const production = false; //是否生产环境
// .pipe(gulpif(production, xxxxxxxxxx())) //生产环境才执行


function clean(cb) {
	console.log('清理');
	// return del(["./dist/","./rev/"]); //删除指定的目录，为转存文件做准备
	return del(["./dist/", "./rev/"]); //删除指定的目录，为转存文件做准备
}

// //图片
function revImg() {
	console.log('处理图片');
	return src("./src/images/**/*") //图片文件夹下面的所有文件
		.pipe(rev())
		.pipe(
			gulpif(
				production, imagemin({ //生产环境才执行
					optimizationLevel: 5, //类型：Number  默认：3  取值范围：0-7（优化等级）
					progressive: true, //类型：Boolean 默认：false 无损压缩jpg图片
				})
			)
		)
		.pipe(dest("./dist/images/")) //设置图片制定出位置

		.pipe(rev.manifest())
		.pipe(dest('rev/revImg'));
}


function revScss() {
	console.log('处理scss');
	return src(['src/scss/**/*.scss'])
		.pipe(sass())
		.pipe(rev())
		.pipe(gulpif(production, cssmin())) //生产环境才执行
		.pipe(dest("dist/css"))

		.pipe(rev.manifest())
		.pipe(dest('rev/revCss'));
}

function revCss() {
	return src(['src/css/**/*.css'], {
			sourcemaps: true
		})
		.pipe(rev())
		.pipe(gulpif(production, cssmin())) //生产环境才执行
		.pipe(dest("./dist/css", {
			sourcemaps: '.'
		}))

		.pipe(rev.manifest())
		.pipe(dest('rev/revCss/css'));
}

function revJs() {
	console.log('处理js');
	return src(["./src/js/**/*.js"], {
			sourcemaps: true
		})
		.pipe(rev())
		.pipe(gulpif(production, uglify())) //生产环境才执行
		.pipe(dest("./dist/js", {
			sourcemaps: '.'
		}))

		.pipe(rev.manifest())
		.pipe(dest('rev/revJs'));
}


function revHtml() {
	var options = {
		removeComments: true, //清除HTML注释
		collapseWhitespace: true, //压缩HTML
		collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input checked />
		removeEmptyAttributes: true, //删除所有空格作属性值 <input id="" /> ==> <input />
		removeScriptTypeAttributes: true, //删除<script>的type="text/javascript"
		removeStyleLinkTypeAttributes: true, //删除<style>和<link>的type="text/css"
		minifyJS: true, //压缩页面JS
		minifyCSS: true //压缩页面CSS
	};
	return src(['rev/**/*.json', 'src/**/*.html'])
		.pipe(revCollector({
			replaceReved: true
		}))
		.pipe(gulpif(production,htmlmin(options))) //生产环境才执行
		.pipe(dest('dist'));
}

// assets资源文件迁移（iconfont图标,echarts.min.js）
function assets() {
	return src("./src/assets/**/*")
		.pipe(dest("./dist/assets/"));
}

function serve() {
	src("./").pipe(
		webserver({
			host: "localhost",
			port: 375,
			livereload: true, // 实时重新加载
			open: "dist/html/index.html", // 启动时默认浏览器打开的文件
			directoryListing: {
				enable: true,
				path: "./dist/html",
			},
			proxies: [{
				source: "/film",
				target: "https://api.iynn.cn/film/", // 代理的域名
			}, ],
		})
	);
}

const Run = series(
	clean,
	parallel(assets, revImg, revScss, revCss, revJs),
	// assets,
	// revImg,
	// scss,
	// revCss,
	// revJs,
	revHtml
	// parallel(revJs,revHtml)
)

watch(['./src/'], Run);
exports.default = series(Run, serve);





// const { src, dest, series, watch, parallel } = require("gulp");
// const del = require("del");
// const rev = require("gulp-rev");
// const revCollector = require('gulp-rev-collector')
// function clean(cb) {
//   console.log("清理");
// 	del(["./dist/","./rev/"]);
//   cb();
// }
// function revJs(cb) {
//   console.log("处理js");
//   src('src/js/**/*.js')
//       .pipe(rev())
//       //压缩
//       .pipe(dest('dist/js'))
//        //生成rev-manifest.json
//        .pipe(rev.manifest())
//        .pipe(dest('rev/js'));
//   cb();
// }
// function revHtml(cb) {
//   console.log("处理html");
// 	src(['rev/**/*.json', 'src/**/*.html'])
// 	    .pipe(revCollector({
// 	        replaceReved: true
// 	    }))
// 	    .pipe(dest('dist'));
//   cb();
// }

// const Run = series(clean,revJs, revHtml);
// exports.default = Run;





// // 引入gulp需要的功能
// const { src, dest, series, watch, parallel } = require("gulp");
// var gulp = require("gulp");
// //浏览器自动访问实时刷新
// const browser_sync = require("browser-sync").create();
// //将scss转成css
// const sass = require("gulp-sass")(require("sass"));
// //起名字，解决合作开发导致重名问题
// const rename = require("gulp-rename");

// //css美化属性值
// const postcss = require("gulp-postcss");
// //css实现各个浏览器的兼容
// const autoprefixer = require("gulp-autoprefixer");
// //公共文件进行合并
// const fileInclude = require("gulp-file-include");
// //es2016转es2015
// const babelz = require("gulp-babel");
// // 导入压缩css文件的第三方包gulp-cssmin
// const cssmin = require("gulp-cssmin");
// // 导入js压缩gulp-uglify第三方包
// const uglify = require("gulp-uglify");
// // 导入html压缩gulp-htmlmin
// const htmlmin = require("gulp-htmlmin");
// // 导入gulp-sourcemaps
// const sourcemaps = require("gulp-sourcemaps");
// // 导入图片压缩gulp-htmlmin
// // const imagemin = require("gulp-imagemin");
// // 导入删除第三方包，用于删除原先的文件夹
// const del = require("del");

// var webserver = require("gulp-webserver");

// // es2016转es2015
// function jsbabel(cb) {
//   src("./src/js/**/*.js")
//     .pipe(
//       babelz({
//         presets: ["es2015"],
//       })
//     )
//     .pipe(sourcemaps.init())
//     // 多个可以设置自己的名称，在引入的时候需要加上名称
//     .pipe(rename({ suffix: ".min" }))
//     .pipe(uglify()) //将转换好的代码进行压缩（上线的时候才压缩）
//     .pipe(sourcemaps.write("."))
//     .pipe(dest("./dist/js/"));
//   cb();
// }

// // scss文件转为css（放到src/css中，待下一步处理）
// function scss(cb) {
//   return (
//     src("./src/scss/**/*.scss")
//       .pipe(sass())
//       //   .pipe(
//       // postcss([
//       //   autoprefixer({
//       //     // 兼容主流浏览器的最新两个版本
//       //     browsers: ["last 2 versions"],
//       //     // 是否美化属性值
//       //     cascade: true,
//       //   }),
//       // ])
//       //   )
//       .pipe(autoprefixer())
//       .pipe(sourcemaps.init())
//       // 多个可以设置自己的名称，在引入的时候需要加上名称
//       .pipe(rename({ suffix: ".min" }))
//       .pipe(cssmin()) //将转换好的css文件进行压缩
//       .pipe(sourcemaps.write("."))
//       .pipe(dest("./dist/css/"))
//   );
//   cb();
// }
// //迁移css
// function css(cb) {
//   return (
//     src("./src/css/**/*.css")
//       .pipe(autoprefixer())
//       .pipe(sourcemaps.init())
//       // 多个可以设置自己的名称，在引入的时候需要加上名称
//       .pipe(rename({ suffix: ".min" }))
//       .pipe(cssmin()) //将转换好的css文件进行压缩
//       .pipe(sourcemaps.write("."))
//       .pipe(dest("./dist/css/"))
//   );
//   cb();
// }

// //图片
// function imgHandler(cd) {
//   return src("./src/images/**/*") //图片文件夹下面的所有文件
//     .pipe(dest("./dist/images/")); //设置图片制定出位置
// }

// //assets资源文件迁移（iconfont图标）
// function assets(cd) {
//   return src("./src/assets/**/*").pipe(dest("./dist/assets/"));
// }

// // html公共模板合并并转移
// function htmlinclude(cb) {
//   src("./src/html/*.html")
//     .pipe(
//       fileInclude({
//         prefix: "@@",
//       })
//     )
//     .pipe(
//       htmlmin({
//         collapseWhitespace: true, //去除空白内容
//         collapseBooleanAttributes: true, //简写布尔值属性
//         removeAttributeQuotes: true, //去除属性上面的双引号
//         removeComments: true, //表示去除注释
//         // removeEmptyElements: true,//表示去除空元素
//         removeScriptTypeAttributes: true, //表示空的属性
//         removeStyleLinkTypeAttributes: true, //表示去除style和link属性上面的type属性
//         minifyJS: true, //压缩内嵌式js代码
//         minifyCSS: true, //压缩内嵌式CSS代码
//       })
//     )
//     .pipe(dest("./dist/html"));
//   cb();
// }

// // 浏览器实时刷新
// function browserSync(cb) {
//   browser_sync.init({
//     files: ["./src/"],
//   });
// }

// // 删除文件
// const delHandler = () => {
//   return del("./dist/"); //删除指定的目录，为转存文件做准备
// };
// gulp.task("webserver", function () {
//   gulp.src("./").pipe(
//     webserver({
//       host: "localhost",
//       port: 303,
//       livereload: true, // 实时重新加载
//       open: "./dist/html/index.html", // 启动时默认浏览器打开的文件
//       directoryListing: {
//         enable: true,
//         path: "./dist/html",
//       },
//       proxies: [
//         {
//           source: "/film",
//           target: "https://api.iynn.cn/film/", // 代理的域名
//         },
//       ],
//     })
//   );
// });

// const PublicRun = series(
//   delHandler, //先进性执行删除任务
//   // newCss,
//   // parallel('webserver',imgHandler,babel,scss,htmlinclude,browserSync),//不分先后顺序,assetsSHandler
//   parallel("webserver", imgHandler, jsbabel, scss, css, assets, htmlinclude, browserSync) //不分先后顺序,assetsSHandler
// );
// watch("./src/", PublicRun);
// exports.default = PublicRun;
